Skip to main content

MySql 慢查询 设置方法

MYSQL慢查询

它可以记录下所有执行超过long_query_time时间的SQL语句, 找到执行慢的SQL, 方便我们对这些SQL进行优化.

下面就是开启mysql慢查询的设置方法

登陆mysql的命令行模式 输入 show variables like '%quer%' ;

mysql> show variables like '%quer%' ;

可以看到 log_slow_queries 是否开启

+——————————-+———+
| Variable_name | Value |
+——————————-+———+
| ft_query_expansion_limit | 20 |
| have_query_cache | YES |
| log_queries_not_using_indexes | OFF |
| log_slow_queries | OFF |
| long_query_time | 10 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 0 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
+——————————-+———+

我这里是开启的状态

找到mysql的配置文件my.cnf(/etc/my.cnf), 在mysqld下方加入慢查询的配置语句

(注意:一定要在[mysqld]下的下方加入, 如果是在[mysqld_safe]下面加入配置语句是不会生效的. )

log-slow-queries = /var/lib/mysql/mysql-slow.log
long_query_time = 2

解释一下

log-slow-queries=/var/lib/mysql/slowquery.log

(指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)

查看方式

Linux: 使用mysql自带命令mysqldumpslow查看 常用命令

-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at' is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
eg:
l语句。

s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,
前面加了a的时倒序 -t,是top
n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g "left join"  host-slow.log

这个是按照时间返回前10条里面含有左连接的sq